﻿using QuanLyThuVien.BLL;
using QuanLyThuVien.DTO;
using QuanLyThuVien.Supporter;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace QuanLyThuVien.GUI
{
    public partial class GUIPhieuThu : DevComponents.DotNetBar.Office2007Form
    {
        private BLLPhieuThu _bllPhieuThu;
        private BLLDocGia _bllDocGia;
        private BLLQuyDinh _bllQuyDinh;
        private DTOPhieuThu _PhieuThu;
        private THAOTAC _ThaoTac;

        //----------------------------------------------------------------------
        //Desc: constructor mặc định
        //----------------------------------------------------------------------
        public GUIPhieuThu()
        {
            InitializeComponent();

            KhoiTao();
            _ThaoTac = THAOTAC.XEM;
        }

        //----------------------------------------------------------------------
        //Desc: constructor 1 tham số
        //----------------------------------------------------------------------
        public GUIPhieuThu(THAOTAC thaotac)
        {
            InitializeComponent();

            KhoiTao();
            _ThaoTac = thaotac;
        }

        //----------------------------------------------------------------------
        //Desc: constructor 2 tham số
        //----------------------------------------------------------------------
        public GUIPhieuThu(THAOTAC thaotac, DTOPhieuThu phieuthu)
        {
            InitializeComponent();

            KhoiTao();
            _ThaoTac = thaotac;
            _PhieuThu = phieuthu;
        }

        //----------------------------------------------------------------------
        //Desc: khởi tạo
        //----------------------------------------------------------------------
        public void KhoiTao()
        {
            _bllPhieuThu = new BLLPhieuThu();
            _bllDocGia = new BLLDocGia();
            _bllQuyDinh = new BLLQuyDinh();
            _PhieuThu = new DTOPhieuThu();
        }

        //----------------------------------------------------------------------
        //Desc: cập nhật giao diện
        //----------------------------------------------------------------------
        public void CapNhatGiaoDien()
        {
            switch (_ThaoTac)
            { 
                case THAOTAC.THEM:
                    this.Text = "LẬP PHIẾU THU TIỀN PHẠT";
                    _txtMaDG.ReadOnly = false;
                    _dtNgayLap.IsInputReadOnly = false;
                    _dtNgayLap.ButtonDropDown.Visible = true;
                    _txtSoTienThu.ReadOnly = false;

                    _btnThemMoi.Visible = true;
                    _btnLapPhieu.Visible = true;
                    //_btnSua.Visible = false;
                    break;
                case THAOTAC.SUA:
                    this.Text = "THÔNG TIN PHIẾU THU TIỀN PHẠT";
                    _txtMaDG.ReadOnly = false;
                    _dtNgayLap.IsInputReadOnly = false;
                    _dtNgayLap.ButtonDropDown.Visible = true;
                    _txtSoTienThu.ReadOnly = false;

                    _btnThemMoi.Visible = true;
                    _btnLapPhieu.Visible = false;
                    //_btnSua.Visible = true;
                    break;
                case THAOTAC.XEM:
                    this.Text = "THÔNG TIN PHIẾU THU TIỀN PHẠT";
                    _txtMaDG.ReadOnly = true;
                    _dtNgayLap.IsInputReadOnly = true;
                    _dtNgayLap.ButtonDropDown.Visible = false;
                    _txtSoTienThu.ReadOnly = true;

                    _btnThemMoi.Visible = false;
                    _btnLapPhieu.Visible = false;
                    //_btnSua.Visible = false;
                    break;
            }
        }

        //----------------------------------------------------------------------
        //Desc: cập nhật nội dung
        //----------------------------------------------------------------------
        public void CapNhatNoiDung()
        {
            switch (_ThaoTac)
            {
                case THAOTAC.THEM:
                    _dtNgayLap.Value = DateTime.Today;
                    break;
                default:
                    HienThiThongTinPhieuThu();
                    break;
            }
        }

        //----------------------------------------------------------------------
        //Desc: hiển thị thông tin phiếu thu
        //----------------------------------------------------------------------
        public void HienThiThongTinPhieuThu()
        {
            _txtMaDG.Text = _PhieuThu.DocGia.MaDG;
            _txtHoTen.Text = _PhieuThu.DocGia.HoTen;
            _dtNgayLap.Value = _PhieuThu.NgayLap;
            _txtTongNo.Text = (_PhieuThu.SoTienThu + _PhieuThu.ConLai).ToString();
            _txtSoTienThu.Text = _PhieuThu.SoTienThu.ToString();
            _txtConLai.Text = _PhieuThu.ConLai.ToString();
        }

        //----------------------------------------------------------------------
        //Desc: xóa tất cả thông tin hiển thị
        //----------------------------------------------------------------------
        public void XoaTatCa()
        {
            if (_PhieuThu != null)
                _PhieuThu.Reset();
            _txtMaDG.Text = "";
            _txtHoTen.Text = "";
            _txtTongNo.Text = "";
            _txtSoTienThu.Text = "";
            _txtConLai.Text = "";
        }

        //----------------------------------------------------------------------
        //Desc: tính nợ còn lại
        //----------------------------------------------------------------------
        public void TinhNoConLai()
        {
            if (_ThaoTac == THAOTAC.XEM)
                return;

            double tongno = 0;
            try
            {
                tongno = Double.Parse(_txtTongNo.Text);
            }
            catch { }
            if (tongno == null)
                return;

            double sotienthu = 0;
            try
            {
                sotienthu = Double.Parse(_txtSoTienThu.Text);
            }
            catch { }
            if (sotienthu == null)
                return;

            _txtConLai.Text = (tongno - sotienthu).ToString();
        }

        //----------------------------------------------------------------------
        //Desc: lấy dữ liệu
        //----------------------------------------------------------------------
        public DTOPhieuThu LayDuLieuForm()
        {
            DTOPhieuThu phieuthu = new DTOPhieuThu();
            if (_txtMaDG.Text == "")
            {
                MessageBox.Show("Chưa nhập mã độc giả");
                return null;
            }
            DTODocGia docgia = _bllDocGia.LayThongTinDG(_txtMaDG.Text);
            if (docgia == null)
            {
                MessageBox.Show("Độc giả không tồn tại");
                return null;
            }
            phieuthu.DocGia = docgia;
            phieuthu.NgayLap = _dtNgayLap.Value;

            double tienthu;
            if (_txtSoTienThu.Text == "")
            {
                MessageBox.Show("Chưa nhập số tiền thu");
                return null;
            }
            try
            {
                tienthu = Double.Parse(_txtSoTienThu.Text.ToString());
            }
            catch
            {
                MessageBox.Show("Nhập sai tiền thu");
                return null;
            }
            if (tienthu < 0)
            {
                MessageBox.Show("Số tiền thu không được nhỏ hơn 0");
                return null;
            }
            int quydinh = _bllQuyDinh.LayQDSoTienThu();
            if (quydinh < 0)
            {
                MessageBox.Show("Không lấy được quy đinh số tiền thu");
                return null;
            }
            else
            {
                if (quydinh > 0 && tienthu > phieuthu.DocGia.TongNo)
                {
                    MessageBox.Show("Số tiền thu không được vượt quá tổng nợ");
                    return null;
                }
            }

            phieuthu.SoTienThu = tienthu;
            phieuthu.ConLai = phieuthu.DocGia.TongNo - tienthu;

            return phieuthu;
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện form load
        //----------------------------------------------------------------------
        private void GUIPhieuThuTienPhat_Load(object sender, EventArgs e)
        {
            CapNhatGiaoDien();
            CapNhatNoiDung();
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button Thoat
        //----------------------------------------------------------------------
        private void _btnThoat_Click(object sender, EventArgs e)
        {
            Close();
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện rời textbox MaDG
        //----------------------------------------------------------------------
        private void _txtMaDG_Leave(object sender, EventArgs e)
        {
            if (_ThaoTac != THAOTAC.THEM)
                return;

            if (_txtMaDG.Text != _PhieuThu.DocGia.MaDG || _PhieuThu.DocGia.MaDG == "")
            {
                DTODocGia docgia = _bllDocGia.LayThongTinDG(_txtMaDG.Text);
                if (docgia == null)
                {
                    MessageBox.Show("Mã độc giả không tồn tại");
                    _txtMaDG.Text = _PhieuThu.DocGia.MaDG;
                }
                else
                {
                    _PhieuThu.DocGia = docgia;
                    _txtHoTen.Text = docgia.HoTen;
                    _txtTongNo.Text = docgia.TongNo.ToString();
                }
            }
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button Thu
        //----------------------------------------------------------------------
        private void _btnThu_Click(object sender, EventArgs e)
        {
            DTOPhieuThu phieuthu = LayDuLieuForm();
            if (phieuthu != null)
            {
                if (_bllPhieuThu.PhatSinhMaPhieuThu(ref phieuthu))
                {
                    if (_bllPhieuThu.CapNhat(phieuthu))
                    {
                        MessageBox.Show("Lập phiếu thu thành công");
                        if (_bllDocGia.CapNhatTongNo(phieuthu.DocGia.MaDG, phieuthu.ConLai))
                            MessageBox.Show("Cập nhật tổng nợ thành công");
                        else
                            MessageBox.Show("Cập nhật tổng nợ thất bại");
                        _PhieuThu = phieuthu;
                        _ThaoTac = THAOTAC.SUA;
                        CapNhatGiaoDien();
                        CapNhatNoiDung();
                    }
                    else
                        MessageBox.Show("Lập phiếu thu thất bại");
                }
                else
                    MessageBox.Show("Không tạo được mã phiếu thu");
            }
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện thay đổi tổng nợ
        //----------------------------------------------------------------------
        private void txtTongNo_TextChanged(object sender, EventArgs e)
        {
            TinhNoConLai();
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện thay đổi số tiền thu
        //----------------------------------------------------------------------
        private void txtSoTienThu_TextChanged(object sender, EventArgs e)
        {
            TinhNoConLai();
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện click button ThemMOi
        //----------------------------------------------------------------------
        private void btnThemMoi_Click(object sender, EventArgs e)
        {
            XoaTatCa();
            _ThaoTac = THAOTAC.THEM;
            CapNhatGiaoDien();
            CapNhatNoiDung();
        }

        //----------------------------------------------------------------------
        //Desc: xử lý sự kiện key press
        //----------------------------------------------------------------------
        private void txtNhapSo_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e != null)
            {
                if (Utils.CheckKeyCode(e.KeyChar))
                    e.Handled = false;
                else
                    e.Handled = true;
            }
        }
    }
}
